﻿#ifndef TCPCLIENT_H
#define TCPCLIENT_H

#include <QWidget>
#include<QTcpSocket>
#include<QUdpSocket>
#include<QHostAddress>
#include<QCloseEvent>
#include<QFile>

/*************************************************
  Class:       TcpClient
  Description: 这是客户端类，可以向服务端发送消息，发送
               文件，但是目前只能发送文本文件，然后服务
               端会读取文本内容并显示在内容框内，不知
               为何，客户端一定要后打开。只有先打开服务
               才能连接成功。发送消息用的是UDP通信方式，
               发送文件用的是TCP通信方式。开启窗口自动
               连接。
  Auther:      林锦涛
  Time:        2021-1-31 14:24:28
*************************************************/

namespace Ui {
class TcpClient;
}

class TcpClient : public QWidget
{
    Q_OBJECT

public:
    explicit TcpClient(QWidget *parent = nullptr);
    ~TcpClient();



    /*************************************************
      Description:    处理接收的数据UDP
      return:         void
      Called By:
      Auther:         林锦涛
      Time:           2021-1-31 14:31:48
    *************************************************/
    void dealrecvMsg();

    /*************************************************
      Description:    tcp断开连接处理
      return:         void
      Called By:
      Auther:         林锦涛
      Time:           2021-1-31 14:31:48
    *************************************************/
    void dealDisconnect();

    /*************************************************
      Description:    tcp连接服务器函数
      return:         void
      Called By:
      Auther:         林锦涛
      Time:           2021-1-31 14:31:48
    *************************************************/
    void connectServer();

    /*************************************************
      Description:    重写关闭函数
      return:         void
      Called By:
      Auther:         林锦涛
      Time:           2021-1-31 14:31:48
    *************************************************/
    void closeEvent(QCloseEvent *e);

private slots:
    /*************************************************
      Description:    发送按钮函数
      return:         void
      Called By:
      Auther:         林锦涛
      Time:           2021-1-31 14:31:48
    *************************************************/
    void on_pushButton_clicked();

    /*************************************************
      Description:    选择文件函数
      return:         void
      Called By:
      Auther:         林锦涛
      Time:           2021-1-31 14:31:48
    *************************************************/
    void on_btnSelect_clicked();

private:
    Ui::TcpClient *ui;

    QUdpSocket *udpSocket;

    QTcpSocket *tcpSocket;
    QString fileName;  //文件名字
    qint64 fileSize;  //文件大小
    qint64 sendSize;  //发送文件大小
    QFile file;   //文件大小
};

#endif // TCPCLIENT_H
